package com.example.demo.day.config.learn.designBook.part10Template.part4;

public abstract class HummerModel {
    /**
     * 首先，这个模型要能够被发动起来，别管是手摇发动，还是电力发动，反正
     * 是要能够发动起来，那这个实现要在实现类里了
     */
    public abstract void start();

    //能发动，还要能停下来
    public abstract void stop();

    //喇叭会发出声音，是嘀嘀叫，还是哔哔叫
    public abstract void alarm();

    //引擎会轰隆隆地响
    public abstract void engineBoom();

    //那模型应该会跑吧，别管是人力推的，还是电力驱动的，总之会要跑
    public void run() {
        //首先要发动汽车
        this.start();
        //引擎开始轰鸣
        this.engineBoom();
        //然后就开始跑了，跑的过程中遇到一条狗挡路，就按喇叭
        if (this.isAlarm()) {
            this.alarm();
        }
        //到达目的地就停车
        this.stop();
    }

    //钩子方法，默认喇叭是会响的
    protected boolean isAlarm() {
        return true;
    }

}
